package org.wm.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.wm.domain.SysNotice;
import org.wm.response.PageResult;
import org.wm.response.ResponseResult;
import org.wm.service.ISysNoticeService;

import java.util.Arrays;

/**
 * 公告 信息操作处理
 * (已按照 Mybatis-Plus 混合模式进行改造)
 */
@RestController
@RequestMapping("/system/notice")
public class SysNoticeController extends BaseController {

    @Autowired
    private ISysNoticeService noticeService;

    /**
     * 获取通知公告列表
     */
    @PreAuthorize("@ss.hasPermi('system:notice:list')")
    @GetMapping("/list")
    public PageResult<SysNotice> list(SysNotice notice) {
        Page<SysNotice> page = getPage();
        // 【修正】调用新的分页方法名
        IPage<SysNotice> list = noticeService.selectNoticePage(page, notice);
        return getDataTable(list);
    }

    /**
     * 根据通知公告编号获取详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:notice:query')")
    @GetMapping(value = "/{noticeId}")
    public ResponseResult<SysNotice> getInfo(@PathVariable Long noticeId) {
        // 【修正】调用标准的 getById 方法
        return ResponseResult.success(noticeService.getById(noticeId));
    }

    /**
     * 新增通知公告
     */
    @PreAuthorize("@ss.hasPermi('system:notice:add')")
    @PostMapping
    // 【修正】返回类型改为 ResponseResult<?>
    public ResponseResult<?> add(@Validated @RequestBody SysNotice notice) {
        notice.setCreateBy(getUsername());
        // 【修正】调用 IService 提供的 save 方法，它返回 boolean
        boolean result = noticeService.save(notice);
        return toAjax(result);
    }

    /**
     * 修改通知公告
     */
    @PreAuthorize("@ss.hasPermi('system:notice:edit')")
    @PutMapping
    // 【修正】返回类型改为 ResponseResult<?>
    public ResponseResult<?> edit(@Validated @RequestBody SysNotice notice) {
        notice.setUpdateBy(getUsername());
        // 【修正】调用 IService 提供的 updateById 方法，它返回 boolean
        boolean result = noticeService.updateById(notice);
        return toAjax(result);
    }

    /**
     * 删除通知公告
     */
    @PreAuthorize("@ss.hasPermi('system:notice:remove')")
    @DeleteMapping("/{noticeIds}")
    // 【修正】返回类型改为 ResponseResult<?>
    public ResponseResult<?> remove(@PathVariable Long[] noticeIds) {
        // 【修正】调用 IService 提供的 removeByIds 方法，它返回 boolean
        boolean result = noticeService.removeByIds(Arrays.asList(noticeIds));
        return toAjax(result);
    }
}